{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# C).调整正则参数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "# import modules\n",
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "2       2.0  2016      4   17       ...           0      0    0       0   \n",
       "3       2.0  2016      4   18       ...           0      0    0       0   \n",
       "4       5.0  2016      4   28       ...           0      0    1       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "2      0           0     0        0     0               0  \n",
       "3      0           0     0        0     0               2  \n",
       "4      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dpath = './data/'\n",
    "train = pd.read_csv(dpath +\"RentListingInquries_FE_train.csv\")\n",
    "# train = train.iloc[:100,:]\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y_train = train['interest_level']\n",
    "X_train = train.drop('interest_level',axis=1)\n",
    "X_train = np.array(X_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Prepare cross validation \n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)\n",
    "kfold = list(kfold.split(X_train, y_train))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'reg_alpha': [0.1, 0.5, 1], 'reg_lambda': [0.5, 0.75, 1, 1.5, 2]}"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# reg_alpha = [0.1, 1]\n",
    "# reg_lambda = [0.5, 1, 2]\n",
    "# Best: -0.587025 using {'reg_alpha': 1, 'reg_lambda': 0.5}\n",
    "\n",
    "# 经过计算发现，reg_alpha 越大越好，reg_lambda越小越好\n",
    "# 因此，重新调整参数范围\n",
    "# reg_alpha = [1, 1.5, 2] 第一次调整最优是1， 继续调整\n",
    "reg_alpha = [0.1,0.5,1]\n",
    "# reg_lambda = [0.02, 0.1,0.5] 第一次调整，最优是0.5，继续调整\n",
    "reg_lambda = [0.5,0.75,1,1.5,2]\n",
    "\n",
    "param_test3 = dict(reg_alpha=reg_alpha, reg_lambda=reg_lambda)\n",
    "param_test3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/sklearn/model_selection/_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.58827, std: 0.00328, params: {'reg_alpha': 0.1, 'reg_lambda': 0.5},\n",
       "  mean: -0.58825, std: 0.00400, params: {'reg_alpha': 0.1, 'reg_lambda': 0.75},\n",
       "  mean: -0.58786, std: 0.00410, params: {'reg_alpha': 0.1, 'reg_lambda': 1},\n",
       "  mean: -0.58904, std: 0.00296, params: {'reg_alpha': 0.1, 'reg_lambda': 1.5},\n",
       "  mean: -0.58799, std: 0.00385, params: {'reg_alpha': 0.1, 'reg_lambda': 2},\n",
       "  mean: -0.58816, std: 0.00391, params: {'reg_alpha': 0.5, 'reg_lambda': 0.5},\n",
       "  mean: -0.58820, std: 0.00337, params: {'reg_alpha': 0.5, 'reg_lambda': 0.75},\n",
       "  mean: -0.58880, std: 0.00404, params: {'reg_alpha': 0.5, 'reg_lambda': 1},\n",
       "  mean: -0.58892, std: 0.00330, params: {'reg_alpha': 0.5, 'reg_lambda': 1.5},\n",
       "  mean: -0.58874, std: 0.00343, params: {'reg_alpha': 0.5, 'reg_lambda': 2},\n",
       "  mean: -0.58790, std: 0.00342, params: {'reg_alpha': 1, 'reg_lambda': 0.5},\n",
       "  mean: -0.58772, std: 0.00361, params: {'reg_alpha': 1, 'reg_lambda': 0.75},\n",
       "  mean: -0.58791, std: 0.00354, params: {'reg_alpha': 1, 'reg_lambda': 1},\n",
       "  mean: -0.58891, std: 0.00367, params: {'reg_alpha': 1, 'reg_lambda': 1.5},\n",
       "  mean: -0.58854, std: 0.00346, params: {'reg_alpha': 1, 'reg_lambda': 2}],\n",
       " {'reg_alpha': 1, 'reg_lambda': 0.75},\n",
       " -0.58771678471053967)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb3 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=187,  #第一轮参数调整得到的n_estimators最优值\n",
    "        max_depth=7, # 根据上一轮结果，更新最优解\n",
    "        min_child_weight=7,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch3 = GridSearchCV(xgb3, param_grid = param_test3, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch3.fit(X_train , y_train)\n",
    "\n",
    "gsearch3.grid_scores_, gsearch3.best_params_, gsearch3.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([ 173.10813413,  173.95353909,  172.78305225,  172.33273129,\n",
       "         191.66308637,  267.04497752,  300.87984672,  319.3363091 ,\n",
       "         311.23946052,  253.43948741,  173.51990199,  173.22343922,\n",
       "         171.71450238,  170.39543753,  141.37311811]),\n",
       " 'mean_score_time': array([ 1.18759384,  1.55324697,  1.28176632,  1.09339261,  1.67254157,\n",
       "         3.47103324,  2.51789684,  2.63108301,  0.91647444,  1.00604224,\n",
       "         1.03142862,  0.83447857,  0.99248223,  0.78046904,  0.7116642 ]),\n",
       " 'mean_test_score': array([-0.58826991, -0.58824993, -0.5878597 , -0.58904071, -0.58798795,\n",
       "        -0.58816302, -0.5882022 , -0.58879848, -0.58892195, -0.58874429,\n",
       "        -0.58789658, -0.58771678, -0.58790905, -0.58890578, -0.58854378]),\n",
       " 'mean_train_score': array([-0.46787172, -0.46859449, -0.46888086, -0.47027275, -0.47185206,\n",
       "        -0.46713943, -0.46839351, -0.4682771 , -0.46965034, -0.47133115,\n",
       "        -0.46788067, -0.46909996, -0.46945921, -0.47103722, -0.47319149]),\n",
       " 'param_reg_alpha': masked_array(data = [0.1 0.1 0.1 0.1 0.1 0.5 0.5 0.5 0.5 0.5 1 1 1 1 1],\n",
       "              mask = [False False False False False False False False False False False False\n",
       "  False False False],\n",
       "        fill_value = ?),\n",
       " 'param_reg_lambda': masked_array(data = [0.5 0.75 1 1.5 2 0.5 0.75 1 1.5 2 0.5 0.75 1 1.5 2],\n",
       "              mask = [False False False False False False False False False False False False\n",
       "  False False False],\n",
       "        fill_value = ?),\n",
       " 'params': [{'reg_alpha': 0.1, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 0.1, 'reg_lambda': 0.75},\n",
       "  {'reg_alpha': 0.1, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 0.1, 'reg_lambda': 1.5},\n",
       "  {'reg_alpha': 0.1, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 0.5, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 0.5, 'reg_lambda': 0.75},\n",
       "  {'reg_alpha': 0.5, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 0.5, 'reg_lambda': 1.5},\n",
       "  {'reg_alpha': 0.5, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 1, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 1, 'reg_lambda': 0.75},\n",
       "  {'reg_alpha': 1, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 1, 'reg_lambda': 1.5},\n",
       "  {'reg_alpha': 1, 'reg_lambda': 2}],\n",
       " 'rank_test_score': array([ 9,  8,  2, 15,  5,  6,  7, 12, 14, 11,  3,  1,  4, 13, 10], dtype=int32),\n",
       " 'split0_test_score': array([-0.58256894, -0.58113565, -0.58014585, -0.58420357, -0.58145491,\n",
       "        -0.58167014, -0.58246285, -0.58141233, -0.58294167, -0.58423623,\n",
       "        -0.58260843, -0.58135609, -0.58224457, -0.58336959, -0.58292538]),\n",
       " 'split0_train_score': array([-0.47081377, -0.47155366, -0.47204364, -0.47278344, -0.47262549,\n",
       "        -0.46855682, -0.46870387, -0.46937143, -0.47127775, -0.47319373,\n",
       "        -0.47001556, -0.47071889, -0.47154872, -0.47248176, -0.47495364]),\n",
       " 'split1_test_score': array([-0.58751633, -0.58734828, -0.58770996, -0.58785835, -0.58602838,\n",
       "        -0.58596449, -0.58756298, -0.58814485, -0.58923222, -0.58571505,\n",
       "        -0.58567105, -0.5867292 , -0.58562304, -0.58584896, -0.58639041]),\n",
       " 'split1_train_score': array([-0.46746701, -0.46680788, -0.46827382, -0.47092246, -0.47250052,\n",
       "        -0.46695467, -0.468839  , -0.46912991, -0.46936845, -0.4718336 ,\n",
       "        -0.4679092 , -0.4691039 , -0.46847902, -0.47106985, -0.47230853]),\n",
       " 'split2_test_score': array([-0.58875786, -0.58907225, -0.5890784 , -0.5893744 , -0.58937613,\n",
       "        -0.59001158, -0.58855557, -0.58971092, -0.58907617, -0.5887098 ,\n",
       "        -0.58912227, -0.58939437, -0.58891443, -0.59045635, -0.58984749]),\n",
       " 'split2_train_score': array([-0.46724912, -0.46834066, -0.46880685, -0.4693921 , -0.47131787,\n",
       "        -0.4670923 , -0.46890343, -0.46726946, -0.46998981, -0.47080862,\n",
       "        -0.46784405, -0.47025131, -0.47000325, -0.47099156, -0.47407252]),\n",
       " 'split3_test_score': array([-0.59008703, -0.59084301, -0.59042261, -0.59070721, -0.59107168,\n",
       "        -0.59040685, -0.58961623, -0.59188129, -0.59038968, -0.59191492,\n",
       "        -0.58957706, -0.58899274, -0.59109264, -0.59242677, -0.59107451]),\n",
       " 'split3_train_score': array([-0.46469771, -0.46611588, -0.46607601, -0.46698136, -0.46968808,\n",
       "        -0.46456202, -0.46601719, -0.46719973, -0.4683285 , -0.46919942,\n",
       "        -0.46610793, -0.46756624, -0.46826332, -0.46932485, -0.47155805]),\n",
       " 'split4_test_score': array([-0.59242065, -0.59285185, -0.59194293, -0.59306125, -0.59200989,\n",
       "        -0.59276345, -0.59281476, -0.59284427, -0.59297124, -0.59314678,\n",
       "        -0.59250551, -0.59211286, -0.59167174, -0.59242828, -0.59248229]),\n",
       " 'split4_train_score': array([-0.46913099, -0.47015436, -0.469204  , -0.47128436, -0.47312834,\n",
       "        -0.46853132, -0.46950404, -0.46841496, -0.46928717, -0.47162037,\n",
       "        -0.46752661, -0.46785947, -0.46900176, -0.47131807, -0.47306469]),\n",
       " 'std_fit_time': array([  0.26792654,   0.75079898,   0.72890682,   0.45759133,\n",
       "         37.69928061,   1.4905252 ,  26.40003407,   1.34643856,\n",
       "          2.71596811,  64.74508795,   0.339272  ,   0.49058491,\n",
       "          0.8151285 ,   1.00577976,  23.41483886]),\n",
       " 'std_score_time': array([ 0.18867627,  0.44455269,  0.51830776,  0.43237161,  0.14864441,\n",
       "         0.77973068,  1.07661018,  0.42059726,  0.08152831,  0.29714903,\n",
       "         0.12061043,  0.16728953,  0.17689864,  0.06424396,  0.12569756]),\n",
       " 'std_test_score': array([ 0.00328133,  0.00400006,  0.00410493,  0.00296132,  0.00385052,\n",
       "         0.00391421,  0.00336885,  0.00404196,  0.00329949,  0.00343315,\n",
       "         0.00342003,  0.00361109,  0.0035388 ,  0.00366616,  0.00345886]),\n",
       " 'std_train_score': array([ 0.0020429 ,  0.00202928,  0.00191566,  0.00196763,  0.00123416,\n",
       "         0.00145779,  0.00121942,  0.00090773,  0.00097184,  0.00131321,\n",
       "         0.00125123,  0.00125201,  0.00120517,  0.00101004,  0.00121204])}"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch3.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.587717 using {'reg_alpha': 1, 'reg_lambda': 0.75}\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a1ea63240>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch3.best_score_, gsearch3.best_params_))\n",
    "test_means = gsearch3.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch3.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch3.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch3.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch3.cv_results_).to_csv('my_preds_reg_alpha_reg_lambda_2.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "train_scores = np.array(train_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "\n",
    "for i, value in enumerate(reg_alpha):\n",
    "    pyplot.plot(reg_lambda, -test_scores[i], label= 'reg_alpha:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'reg_alpha' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig('reg_alpha_vs_reg_lambda2.png' )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
